@file:Suppress("unused", "MemberVisibilityCanBePrivate")

/**
 * 此类用于整理第三方包的依赖
 */
object Other {

    //region glide----------------------------------------------------------------------------------
    /**
     * [gilde](https://github.com/bumptech/glide)
     *
     * 异步图片加载库，谷歌官方出品，包含常用的占位图，圆形裁减，高斯模糊等功能
     * 调用时传入Activity或者Fragment实例可以实现只在界面生命周期中加载图片（更高效）
     * 可以自定义输入流转换成内存对象（Bitmap DrawableSVG等等），以及sd卡缓存与内存对象的转换，相当强大
     */
    const val glide = "com.github.bumptech.glide:glide:4.12.0"
    const val glideCompiler = "com.github.bumptech.glide:compiler:4.12.0"
    //endregion-------------------------------------------------------------------------------------

    /**
     * [baseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper)
     *
     * RecyclerViewAdapter封装库，可以快速实现多级列表，多种类Item，Item拖拽与滑动删除等
     * 项目位于jitpack依赖库，需要在project build.gradle 添加
     *
     *               maven { url "https://jitpack.io" }
     */
    const val baseRecyclerViewAdapterHelper =
        "com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4"

    //region retrofit-------------------------------------------------------------------------------

    const val retrofitVersion = "2.9.0"

    /**
     * 网络请求框架 基于okhttp实现，特色在于可以将后台接口映射为java接口
     * 通过框架实例化接口可以进行api调用，该框架支持协程，所以RxJava也在慢慢被androidx淘汰。。。
     */
    const val retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion"

    /**
     *  retrofit接口调用直接返回json对象（这个包已经依赖了gson用于json解析）
     */
    const val converterGson = "com.squareup.retrofit2:converter-gson:$retrofitVersion"

    /**
     *  让retrofit接口调用支持返回字符串对象
     */
    const val converterScalars = "com.squareup.retrofit2:converter-scalars:$retrofitVersion"

    /**
     * 让retrofit网络请求支持返回RxJava的任务封装对象
     * 作用在于可以接着在拿到网络数据后做后续处理（如子线程解压解密数据）再回调
     */
    const val adapterRxjava3 = "com.squareup.retrofit2:adapter-rxjava3:$retrofitVersion"

    //okhttp 3 日志拦截器
    const val loggingInterceptor = "com.squareup.okhttp3:logging-interceptor:4.8.0"

    //网络请求cookie持久化(https://github.com/franmontiel/PersistentCookieJar)
    const val okhttpCookieJar = "com.github.franmontiel:PersistentCookieJar:v1.0.1"

    //endregion-------------------------------------------------------------------------------------

    //region rxjava---------------------------------------------------------------------------------

    const val rxjavaVersion = "3.1.5"

    /**
     * https://github.com/ReactiveX/RxJava
     * RxJava，一个任务调度框架
     * 例如用于任务不同阶段切换不同线程，多任务合并或拆分
     * 最大特色在于其链式调用减少多层代码块，在任务过程中需要添加新的环节时只需在中间插入即可
     *
     * 该框架学精不容易，可惜了，已经慢慢被kotlin淘汰，协程可以以同步的方式写异步代码，结合ViewModel基本是主流，
     * 目前RxJava的常用场景只剩下RxBus，实现与EventBus类似的全局通知，然而就算是这个也在逐渐被LiveData Flow替代，
     * 毕竟人家界面销毁自动注销监听，时代的眼泪了。
     */
    const val rxjava = "io.reactivex.rxjava3:rxjava:$rxjavaVersion"

    /**
     * https://github.com/ReactiveX/RxAndroid
     * rxjava是一个通用java包，任何做java开发的都可以用，rxandroid包含了Android中特有的东西，
     * 比如任务切换到MainThread执行
     */
    const val rxandroid = "io.reactivex.rxjava3:rxandroid:$rxjavaVersion"
    const val rxkotlin = "io.reactivex.rxjava3:rxkotlin:$rxjavaVersion"
    //endregion-------------------------------------------------------------------------------------

    //region dagger---------------------------------------------------------------------------------

    /**
     * 一个类似web端spring的框架，用于android项目中实现依赖注入，但其使用不易，入门难，用起来项目代码量剧增，谷歌又出了
     * 个封装版本的框架，但我开始放弃在项目中使用了，增加项目复杂度，基本是给接手的人挖坑。
     */
    const val dagger = "com.google.dagger:dagger:2.15"

    //annotationProcessor
    const val daggerCompiler = "com.google.dagger:dagger-compiler:2.15"

    //compileOnly
    const val jsr250Api = "javax.annotation:jsr250-api:1.0"

    /**
     *  dagger2 用于kotlin项目
     */
    const val dagger2Android = "com.google.dagger:dagger-android:2.11"
    const val dagger2AndroidSupport = "com.google.dagger:dagger-android-support:2.11"
    const val dagger2AndroidProcessor = "com.google.dagger:dagger-android-processor:2.11"
    const val dagger2Compiler = "com.google.dagger:dagger-compiler:2.11"
    //endregion-------------------------------------------------------------------------------------

    /**
     * [rxpermissions](https://github.com/tbruyelle/RxPermissions)
     *
     * 基于RxJava框架的动态权限申请，牛逼之处在于通过fragment来处理onActivityResult，解耦权限请求代码跳来跳去的问题，
     * 连续性好，可读性才好。
     */
    const val rxpermissions = "com.github.tbruyelle:rxpermissions:0.12"

    //region smartRefreshLayout---------------------------------------------------------------------

    /**
     * [smartRefreshLayout](https://github.com/scwang90/SmartRefreshLayout)
     *
     * 下拉刷新和上拉加载更多框架，目前网上用的比较多，很强大的框架，支持自定义
     */
    const val smartRefreshLayout = "io.github.scwang90:refresh-layout-kernel:2.0.5"
    const val smartRefreshLayoutGoogleHeader = "io.github.scwang90:refresh-header-material:2.0.5"
    const val smartRefreshLayoutClassicsFooter = "io.github.scwang90:refresh-footer-classics:2.0.5"

    //endregion-------------------------------------------------------------------------------------

    /**
     * [comscore](https://github.com/comScore/ComScore-Android)
     *
     * 在明报做开发时用到的一个app统计库，主要时统计页面什么时候进入前台，什么时候退出前台
     */
    const val comscore = "com.comscore:android-analytics:5.+"

    //region greenDao-------------------------------------------------------------------------------
    const val greenDaoVersion = "3.3.0"

    /**
     * greenDao数据库，入手简单，直接将实体类映射成表，自动生成Dao类用于常见的增伤改查，其易用性和升级简便的特点让他不至
     * 于很快被androidx.room干掉，虽然我已经不用，但也不希望它成为时代的眼泪，毕竟帮助了很多新手解决了写sql的问题。
     */
    const val greenDao = "org.greenrobot:greendao:$greenDaoVersion"
    const val greenDaoGenerator = "org.greenrobot:greendao-generator:$greenDaoVersion"
    const val greenDaoClasspath = "org.greenrobot:greendao-gradle-plugin:$greenDaoVersion"

    //数据库更新辅助，来自于另一个组织的sdk，可以简便地迁移数据到新的版本
    const val greenDaoUpdateHelper = "io.github.yuweiguocn:GreenDaoUpgradeHelper:v2.2.1"
    //endregion ------------------------------------------------------------------------------------

    //region aria-----------------------------------------------------------------------------------
    const val ariaVersion = "3.8.5"

    /**
     * 文件下载库，有个缺点，即使下载到私有目录，依然会检查sd卡读写权限，没权限就下载失败。。。
     */
    const val aria = "com.arialyy.aria:core:$ariaVersion"
    const val ariaCompiler = "com.arialyy.aria:compiler:$ariaVersion"
    //endregion-------------------------------------------------------------------------------------
    /**
     * zip解压
     */
    const val zip4j = "net.lingala.zip4j:zip4j:1.3.2"

    /**
     * 本地大图加载框架，不会直接加载一整张图片，而是根据屏幕显示的区域对图片进行分块加载，防内存溢出
     */
    const val largeImageView = "com.shizhefei:LargeImageView:1.1.0"

    /**
     * photoView是一个加载图片后可以缩放查看的控件
     */
    const val photoView = "com.github.chrisbanes:PhotoView:1.2.6"

    /**
     * 谷歌出产地json解析框架
     */
    const val gson = "com.google.code.gson:gson:2.8.6"

    /**
     * [exoplayer](https://exoplayer.dev/)
     *
     * 基于Android底层实现播放器，高性能，简单易用，谷歌亲儿子
     */
    const val exoplayer = "com.google.android.exoplayer:exoplayer:2.18.0"

    /**
     * 腾讯bugly，用于开发过程中收集崩溃bug，但由于上报信息携带了设备信息，好像容易被谷歌市场据
     */
    const val bugly = "com.tencent.bugly:crashreport:latest.release"

    /**
     * zxing二维码扫描 版本3.3.3使用java7，3.4.0使用java8的新api，因此Android7.0以下会发生崩溃，若要完全支持java8，需要将程序最低版本调整至android7.0
     */
    const val zxingCore = "com.google.zxing:core:3.3.3"

    /**
     * jsoup 一个网页解析工具，用于爬取网页内容
     */
    const val jsoup = "org.jsoup:jsoup:1.13.1"

    //region mqtt-----------------------------------------------------------------------------------

    //eclipse 开源的mqtt连接库，存储在eclipse自己的库中
    //maven {url "https://repo.eclipse.org/content/repositories/paho-snapshots/"}
    const val orgEclipsePahoClientMqttv3 =
        "org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0"

    //eclipse 为android封装的服务
    const val orgEclipsePahoAndroidService =
        "org.eclipse.paho:org.eclipse.paho.android.service:1.1.1"

    //endregion ------------------------------------------------------------------------------------

    //一个强大的图表库
    const val mpAndroidChart = "com.github.PhilJay:MPAndroidChart:v3.1.0"

    //支持滑动删除的控件 maven { url "https://jitpack.io" }
    const val swipeDelMenuLayout = "com.github.mcxtzhang:SwipeDelMenuLayout:V1.3.0"

    //region matrix---------------------------------------------------------------------------------

    //martix版本
    const val matrixVersion = "0.9.0"

    //matrix 腾讯性能检测库
    //  dependencies {
    //      classpath ("com.tencent.matrix:matrix-gradle-plugin:${MATRIX_VERSION}") { changing = true }
    //  }
    //针对 APK 安装包的分析检测工具，根据一系列设定好的规则，检测 APK 是否存在特定的问题，并输出较为详细的检测结果报告，用于分析排查问题以及版本追踪
    const val matrixAndroidLib = "com.tencent.matrix:matrix-android-lib:$matrixVersion"
    const val matrixAndroidCommons = "com.tencent.matrix:matrix-android-commons:$matrixVersion"

    //监控界面流畅性、启动耗时、页面切换耗时、慢函数及卡顿等问题
    const val matrixTraceCanary = "com.tencent.matrix:matrix-trace-canary:$matrixVersion"

    //基于 WeakReference 的特性和 Square Haha 库开发的 Activity 泄漏和 Bitmap 重复创建检测工具
    const val matrixResourceCanaryAndroid =
        "com.tencent.matrix:matrix-resource-canary-android:$matrixVersion"
    const val matrixResourceCanaryCommon =
        "com.tencent.matrix:matrix-resource-canary-common:$matrixVersion"

    //检测文件 IO 问题，包括：文件 IO 监控和 Closeable Leak 监控
    const val matrixIoCanary = "com.tencent.matrix:matrix-io-canary:$matrixVersion"

    //按官方最佳实践自动化检测 SQLite 语句的使用质量
    const val matrixSqliteLintAndroidSdk =
        "com.tencent.matrix:matrix-sqlite-lint-android-sdk:$matrixVersion"

    //监控 App 活跃线程（待机状态 & 前台 Loop 监控）、ASM 调用 (WakeLock/Alarm/Gps/Wifi/Bluetooth 等传感器)、 后台流量 (Wifi/移动网络)等 Battery Historian 统计 App 耗电的数据
    const val matrixBatteryCanary = "com.tencent.matrix:matrix-battery-canary:$matrixVersion"

    //endregion-------------------------------------------------------------------------------------

    //region agora----------------------------------------------------------------------------------

    /**
     * [agora](https://docs.agora.io/cn/documents)
     *
     * 声网，主流的实时音视频通讯提供商，主要业务是RTC
     */
    const val agoraVersion = "3.5.2"

    /**
     * [agoraVoiceCall](https://docs.agora.io/cn/Voice/landing-page?platform=Android)
     *
     * 这个库用于实现语音通话功能
     */
    const val agoraVoiceCall = "io.agora.rtc:voice-sdk:$agoraVersion"

    //endregion ------------------------------------------------------------------------------------

    /**
     * 内存泄露检测工具，仅debug模式下可用debugImplementation
     */
    const val leakcanary = "com.squareup.leakcanary:leakcanary-android:2.12"
}